package br.ufpb.di.ppgi.persistencia.iquery;

import java.util.List;

import br.ufpb.di.ppgi.negocio.modelo.homologacao.proposta.HomologacaoProposta;
import br.ufpb.di.ppgi.negocio.modelo.proposta.Proposta;
import br.ufpb.di.ppgi.negocio.modelo.proposta.PropostaStatus;
import br.ufpb.di.ppgi.negocio.modelo.usuario.Usuario;
import br.ufpb.di.ppgi.persistencia.pagination.HibernateQueryPagedList;

public interface IPropostaQuery extends IQuery {

	public abstract List<Proposta> listByOrientadorId(Long id);
	
	/**
	 * Retorna a lista de propostas do orientador que não estão finalizadas, ou seja, estão ativas
	 * @param id
	 * @return
	 */
	public abstract List<Proposta> listByOrientadorIdAtivo(Long id);

	public abstract List<Proposta> listPendenciasByUsuario(Usuario usuario);
	
	/**
	 * Retorna a lista de HomologacaoProposta dessa proposta que ainda não foram votadas
	 * @param proposta
	 * @return
	 */
	public abstract List<HomologacaoProposta> listPendencias(Proposta proposta);

	public abstract Integer countVotosHomologacao(Proposta proposta, boolean homologado);

	public abstract boolean isVotacaoInsuficiente(Proposta proposta);

	public abstract List<Proposta> listByStatus(PropostaStatus homologado);

	/**
	 * Retorna a quantidade total de votos da proposta. Soma todos, os respondidos e os não respondidos
	 * @param proposta
	 * @return total - Integer
	 */
	public abstract Integer countTotalVotos(Proposta proposta);

	public abstract List<Proposta> listByAlunoId(Long id);

	public abstract HibernateQueryPagedList<Proposta> paginarByKeyAndStatusList(String keyword,
			List<PropostaStatus> statusAceitaveisProposta);

}